package matse11.project;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

/**Spiel beinhaltet Listen ueber highscore, 
 * vom aktuellem Kartenblatt, 
 * von verschiedenen Spielern
 * und ausgespielten Karten.
 * 
 * Desweiteren auch Methoden die das Guthaben uberpruefen und die Karten mischt.
 * 
 * @author Dominic Chauvistre
 *
 */
public class Spiel {

	private ArrayList <String[]> highscore=new ArrayList <String[]>();
	protected ArrayList <Karte> karten =new ArrayList <Karte>();
	protected ArrayList <Mitspieler> mitspieler= new ArrayList <Mitspieler>();
	protected ArrayList <Integer> ausgeteilt= new ArrayList <Integer>();
	protected Spielrunde blackjack;

	
	public Spiel(Spieler spieler) {
		highscoreLaden();
		Dealer dealer=new Dealer();
		this.mitspieler.add(dealer);
		this.mitspieler.add(spieler);
		kartenHinzufuegen();		
		blackjack=new Spielrunde(this);
	}

	/**
	 * 
	 * @param s aktueller Spieler
	 * @return true wenn Guthaben vorhanden
	 */
	public boolean ueberpruefeGuthaben (Spieler s){
		return(s.getGuthaben()>0);
	}
	
	/**
	 * loescht Liste der ausgeteilten Karten und laesst somit alle Karten zum ziehen zu
	 */
	public void mische(){
		ausgeteilt.clear();
	}
	
	/**
	 * liest Datei highscore.txt aus und speichert die Highscoreliste in einer Arrayliste
	 */
	public void highscoreLaden() {
		File f = new File("highscore.txt");
		Scanner sc;
		try {
			sc = new Scanner(f);
			while (sc.hasNextLine()) {
				int i = 0;
				String s = sc.nextLine();
				String[] hs = s.split("/t");
				highscore.add(i, hs);
				i++;
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * liest die Arrayliste aus und speichert die Highscores in der highscore.txt Datei
	 */
	public void highscoreSpeichern(){
		FileWriter fw=null;
		try{
			fw=new FileWriter ("highscore.txt");
			for(int i=0; i<highscore.size();i++){
				fw.write(highscore.get(i)[0]+"/t"+highscore.get(i)[1]);
			}
			fw.close();
		}
		catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * prueft das aktuelle Guthaben auf den Rang in der Higscoreliste und sortiert ggf.
	 * den neuen Highscore ein
	 */
	public void highscoreAktualisieren(){
		String[] akt = new String[2];
		akt[0] = ((Spieler) mitspieler.get(1)).getName();
		akt[1] = ((Spieler) mitspieler.get(1)).getGuthaben()+ "";
		
		for (int i = 0; i < highscore.size(); i++) {
			if (Integer.parseInt(akt[1]) >= (Integer.parseInt(highscore.get(i)[1]))) {
				for (int j = highscore.size() - 1; j > i; j++) {
					highscore.add(j + 1, highscore.get(j));
				}
				highscore.add(i, akt);
				return;
			}
		}
	}

	/**
	 * fuegt den Kartensatz (6x52) der ArrayListe Karten hinzu 
	 * mit Dateipfad zu Bilddatei
	 */
	public void kartenHinzufuegen() {

		for (int j = 1; j < 6; j++) {//index 0 bis 77
			for (int i = 1; i <= 13; i++) {
				if (i < 10) {
					Karte ka = new Karte(i+1, "Karo", "k" + i + ".png");
					karten.add(ka);
				}
				if (i >= 10 && i <= 12) {
					Karte ka = new Karte(10, "Karo", "k" + i + ".png");
					karten.add(ka);
				}
				if (i == 13) {
					Karte ka = new Karte(11, "Karo", "k" + i + ".png");
					karten.add(ka);
				}
			}
		}
		
		for (int j = 1; j < 6; j++) {//index 78 bis 155
			for (int i = 1; i <= 13; i++) {
				if (i < 10) {
					Karte ka = new Karte(i+1, "Herz", "h" + i + ".png");
					karten.add(ka);
				}
				if (i >= 10 && i <= 12) {
					Karte ka = new Karte(10, "Herz", "h" + i + ".png");
					karten.add(ka);
				}
				if (i == 13) {
					Karte ka = new Karte(11, "Herz", "h" + i + ".png");
					karten.add(ka);
				}
			}
		}
		
		for (int j = 1; j < 6; j++) {//index 156 bis 233
			for (int i = 1; i <= 13; i++) {
				if (i < 10) {
					Karte ka = new Karte(i+1, "Pick", "p" + i + ".png");
					karten.add(ka);
				}
				if (i >= 10 && i <= 12) {
					Karte ka = new Karte(10, "Pick", "p" + i + ".png");
					karten.add(ka);
				}
				if (i == 13) {
					Karte ka = new Karte(11, "Pick", "p" + i + ".png");
					karten.add(ka);
				}
			}
		}
		
		for (int j = 1; j < 6; j++) {//index 234 bis 312
			for (int i = 1; i <= 13; i++) {
				if (i < 10) {
					Karte ka = new Karte(i+1, "Kreuz", "kr" + i + ".png");
					karten.add(ka);
				}
				if (i >= 10 && i <= 12) {
					Karte ka = new Karte(10, "Kreuz", "kr" + i + ".png");
					karten.add(ka);
				}
				if (i == 13) {
					Karte ka = new Karte(11, "Kreuz", "kr" + i + ".png");
					karten.add(ka);
				}
			}
		}
	}


}
